
#include "tftp-exception.hpp"
#include "tftp-packet.hpp"

////////////////////////////////////////////////////////////////////////////////

tftp_exception::tftp_exception(const char* msg)
    : msg(msg)
{
}

const char* tftp_exception::what() const throw()
{
    return msg;
}

////////////////////////////////////////////////////////////////////////////////

tftp_exception_malformed::tftp_exception_malformed()
    : tftp_exception("malformed packet")
{
}

////////////////////////////////////////////////////////////////////////////////

tftp_exception_mode::tftp_exception_mode()
    : tftp_exception("unsupported mode")
{
}

////////////////////////////////////////////////////////////////////////////////

tftp_exception_sn::tftp_exception_sn()
    : tftp_exception("invalid s/n")
{
}

////////////////////////////////////////////////////////////////////////////////

tftp_exception_error::tftp_exception_error(const tftp_packet_error e)
    : tftp_exception(e.get_msg())
{
}

////////////////////////////////////////////////////////////////////////////////

tftp_exception_opcode::tftp_exception_opcode(const tftp_packet* packet, const char* msg)
    : tftp_exception(msg)
{
    if(packet->get_opcode() == 5)
    {
        throw tftp_exception_error(tftp_packet_error(packet->get_packet(), packet->get_len()));
    }
}

////////////////////////////////////////////////////////////////////////////////
